// components/license-plate-keyboard/license-plate-keyboard.js
Component({
  properties: {
    // 是否显示键盘
    show: {
      type: Boolean,
      value: false
    },
    // 初始值
    value: {
      type: String,
      value: ''
    }
  },

  data: {
    // 车牌字符数组 (7位普通车牌，8位新能源车牌)
    plateChars: ['', '', '', '', '', '', '', ''],
    // 当前输入位置
    currentIndex: 0,
    // 是否为新能源车牌
    isNewEnergy: false,
    
    // 省份简称
    provinces: [
      '京', '津', '沪', '渝', '冀', '豫', '云', '辽', '黑', '湘',
      '皖', '鲁', '新', '苏', '浙', '赣', '鄂', '桂', '甘', '晋',
      '蒙', '陕', '吉', '闽', '贵', '粤', '青', '藏', '川', '宁',
      '琼'
    ],
    
    // 字母 (去除I和O避免混淆)
    letters: [
      'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K',
      'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
      'W', 'X', 'Y', 'Z'
    ],
    
    // 混合键盘 (字母+数字)
    mixedRows: [
      ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'Q'],
      ['W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A'],
      ['S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Z', 'X'],
      ['C', 'V', 'B', 'N', 'M', 'blank', 'blank', 'blank', 'blank', 'blank']
    ]
  },

  lifetimes: {
    attached() {
      // 初始化时如果有值，解析车牌号
      if (this.data.value) {
        this.parsePlateNumber(this.data.value);
      }
    }
  },

  observers: {
    'show': function(show) {
      if (show && this.data.value) {
        this.parsePlateNumber(this.data.value);
      }
    }
  },

  methods: {
    // 解析车牌号
    parsePlateNumber(plateNumber) {
      if (!plateNumber) return;
      
      const chars = plateNumber.split('');
      const isNewEnergy = chars.length === 8;
      const plateChars = ['', '', '', '', '', '', '', ''];
      
      chars.forEach((char, index) => {
        if (index < 8) {
          plateChars[index] = char;
        }
      });
      
      this.setData({
        plateChars,
        isNewEnergy,
        currentIndex: chars.length < 8 ? chars.length : 7
      });
    },

    // 点击车牌位切换输入位置
    onCharTap(e) {
      const index = e.currentTarget.dataset.index;
      // 只能点击已输入位置和下一个位置
      if (index <= this.data.currentIndex) {
        this.setData({
          currentIndex: index
        });
      }
    },

    // 按键点击
    onKeyTap(e) {
      const value = e.currentTarget.dataset.value;
      const { currentIndex, plateChars, isNewEnergy } = this.data;
      
      // 判断最大输入位数
      const maxIndex = isNewEnergy ? 7 : 6;
      
      if (currentIndex > maxIndex) return;
      
      // 更新当前位置的字符
      plateChars[currentIndex] = value;
      
      // 移动到下一个位置
      const nextIndex = currentIndex < maxIndex ? currentIndex + 1 : currentIndex;
      
      this.setData({
        plateChars,
        currentIndex: nextIndex
      });
      
      // 触发输入事件
      this.triggerChange();
    },

    // 删除
    onDelete() {
      const { currentIndex, plateChars } = this.data;
      
      if (currentIndex < 0) return;
      
      // 如果当前位置有字符，删除当前位置
      if (plateChars[currentIndex]) {
        plateChars[currentIndex] = '';
        this.setData({
          plateChars
        });
      } else if (currentIndex > 0) {
        // 否则删除前一个位置并回退
        plateChars[currentIndex - 1] = '';
        this.setData({
          plateChars,
          currentIndex: currentIndex - 1
        });
      }
      
      this.triggerChange();
    },

    // 新能源车牌
    onNewEnergyTap() {
      if (this.data.currentIndex === 7 && !this.data.isNewEnergy) {
        this.setData({
          isNewEnergy: true
        });
      }
    },

    // 完成
    onConfirm() {
      const plateNumber = this.getPlateNumber();
      
      // 验证车牌号格式
      if (!this.validatePlateNumber(plateNumber)) {
        wx.showToast({
          title: '请输入完整车牌号',
          icon: 'none'
        });
        return;
      }
      
      this.triggerEvent('confirm', { value: plateNumber });
      this.close();
    },

    // 获取车牌号
    getPlateNumber() {
      const { plateChars, isNewEnergy } = this.data;
      const length = isNewEnergy ? 8 : 7;
      return plateChars.slice(0, length).join('');
    },

    // 验证车牌号格式
    validatePlateNumber(plateNumber) {
      if (!plateNumber) return false;
      
      // 普通车牌: 7位 (省份简称 + 字母 + 5位字母或数字)
      // 新能源车牌: 8位 (省份简称 + 字母 + 6位字母或数字)
      const normalPattern = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼][A-Z][A-Z0-9]{5}$/;
      const newEnergyPattern = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼][A-Z][A-Z0-9]{6}$/;
      
      return normalPattern.test(plateNumber) || newEnergyPattern.test(plateNumber);
    },

    // 触发change事件
    triggerChange() {
      const plateNumber = this.getPlateNumber();
      this.triggerEvent('change', { value: plateNumber });
    },

    // 关闭键盘
    close() {
      this.triggerEvent('close');
    },

    // 点击遮罩关闭
    onMaskTap() {
      this.close();
    },

    // 阻止事件冒泡
    stopPropagation() {},

    // 阻止滚动穿透
    preventMove() {}
  }
});
